package com.zyl.function;

import java.util.function.Consumer;

/**
 * @author zhaoyl
 * @date 2024/5/17 11:47
 * @description 说明
 * 1. 由来
 * Consumer是Java 8中的一个函数式接口，它属于java.util.function包。
 * 该接口定义了一个具有单个输入参数并且没有返回值的操作方法accept()。
 *
 * 2. 官方常见五种示例命令和说明
 * 以下是Consumer接口的五种常见示例用法及其说明：
 *
 * 示例命令：Consumer<String> printConsumer = (str) -> System.out.println(str);
 * 说明：创建一个Consumer实例，用于打印传入的字符串参数。
 *
 * 示例命令：Consumer<List<Integer>> listConsumer = (list) -> list.forEach(System.out::println);
 * 说明：创建一个Consumer实例，用于迭代并打印传入的整数列表。
 *
 * 示例命令：Consumer<Integer> squareConsumer = (num) -> System.out.println(num * num);
 * 说明：创建一个Consumer实例，用于计算传入整数的平方并打印结果。
 *
 * 示例命令：Consumer<String> upperCaseConsumer = (str) -> System.out.println(str.toUpperCase());
 * 说明：创建一个Consumer实例，用于将传入的字符串转换为大写并打印结果。
 *
 * 示例命令：Consumer<Integer> oddEvenConsumer = (num) -> System.out.println(num % 2 == 0 ? "Even" : "Odd");
 * 说明：创建一个Consumer实例，用于判断传入的整数是奇数还是偶数并打印结果。
 *
 * 3. 多种主要用法
 * Consumer接口的主要用法包括：
 * 执行一些操作或处理传入的参数，而不返回任何结果。
 * 可以作为函数式接口的方法引用或Lambda表达式使用。
 * 可以与其他函数式接口（如Predicate、Function）结合使用，实现更复杂的逻辑。
 *
 * 4. 有没有其他类似命令
 * 在Java 8的函数式接口中，除了Consumer之外，还有一些类似的接口。其中一些是：
 * Supplier：提供一个无参构造方法，用于获取结果。
 * Predicate：接受一个参数，并返回一个布尔值结果。
 * Function：接受一个参数，并返回一个结果。
 * 这些接口都是函数式接口，可以通过Lambda表达式或方法引用来使用。
 *
 * 5. 区别
 * Consumer和其他函数式接口的区别在于它的accept()方法没有返回值，只执行一些操作。相比之下，Supplier提供结果，Predicate返回布尔值，而Function返回一个具体的结果。
 */
public class ConsumerDemo {
    public static void main(String[] args) {
        //消费型接口：只有输入，没有返回值
    /*    Consumer<String> consumer = new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        };*/
        //lambda表达式
        Consumer<String> consumer =(s)->{
            System.out.println(s);
        };
        consumer.accept("传入字符串AAA");
    }
}
